Route planning among no-fly zones and terrain

ABSTRACT

A technique relates to route planning. Points associated with a start location and a destination location are received. It is determined whether the points comprise one or more hard points, one or more soft points, or both. At least one obstruction to avoid is determined. A route is autonomously generated comprising the points and segments associated with the points, the segments comprising rhumb lines, great-circle arcs, or both. Responsive to the points comprising the one or more soft points, the at least one obstruction is avoided by permitting a distance associated with the one or more soft points to be reached and adding at least one free waypoint. Responsive to the points comprising the one or more hard points, the at least one obstruction is avoided by requiring the one or more hard points to be reached and adding the at least one free waypoint.

BACKGROUND

Exemplary embodiments relate to the art of rotary or fixed wing aircraft, and more particularly, to autonomous global route planning among no-fly zones and terrain.

BRIEF SUMMARY OF THE DISCLOSURE

According to one or more embodiments, a method for route planning is provided. The method comprises receiving points associated with a start location and a destination location, determining whether the points comprise one or more hard points, one or more soft points, or both, and determining at least one obstruction to avoid. A hard point represents a first location through which a route is to pass. A soft point represents a second location associated with a region, defined by a corresponding non-zero radius or distance from the second location, through which the route is to pass. The hard point and soft point can be in any order (e.g., the hard point can come before or after the soft point, or there can be other intervening points in between the hard and soft points). The method includes autonomously generating a route comprising the points and segments associated with the points, the segments comprising rhumb lines, great-circle arcs, or both. Generating the route comprises responsive to the points comprising the one or more soft points, avoiding the at least one obstruction by permitting a distance associated with the one or more soft points to be reached and adding at least one free waypoint. Generating the route comprises responsive to the points comprising the one or more hard points, avoiding the at least one obstruction by requiring the one or more hard points to be reached and adding the at least one free waypoint.

In addition to one or more of the features described above or below, or as an alternative, further embodiments could include wherein autonomously generating the route comprises selecting the route from candidate routes.

In addition to one or more of the features described above or below, or as an alternative, further embodiments could include wherein autonomously generating the route comprises selecting the route from candidate routes based on an optimization.

In addition to one or more of the features described above or below, or as an alternative, further embodiments could include wherein the optimization comprises iterating through the candidate routes based on costs for each of the candidate routes.

In addition to one or more of the features described above or below, or as an alternative, further embodiments could include wherein the route is optimized as a shortest path while accounting for whether the points comprise the one or more hard points, the one or more soft points, or both and avoiding the at least one obstruction.

In addition to one or more of the features described above or below, or as an alternative, further embodiments could include wherein use of the rhumb lines, the great-circle arcs, or both is selected in advance.

In addition to one or more of the features described above or below, or as an alternative, further embodiments could include optimizing turn types associated with the segments.

In addition to one or more of the features described above or below, or as an alternative, further embodiments could include selecting a turn type associated with the segments based on a shortest distance.

In addition to one or more of the features described above or below, or as an alternative, further embodiments could include autonomously controlling a vehicle on the route.

According to one or more embodiments, a method for optimizing turns in a route is provided. The method comprising receiving the route comprising points and segments associated with the points, accessing a turns library, and selecting turn types from the turns library in accordance with whether the points comprise one or more hard points, one or more soft points, or both. A hard point represents a first location through which the route is to pass. A soft point represents a second location associated with a region, defined by a corresponding radius or distance from the second location, through which the route is to pass. The hard point and soft point can be in any order (e.g., the hard point can come before or after the soft point, or there can be other intervening points in between the hard and soft points).

In addition to one or more of the features described above or below, or as an alternative, further embodiments could include wherein a subset of the turn types in the turns library are selectable for the one or more hard points.

In addition to one or more of the features described above or below, or as an alternative, further embodiments could include wherein any of the turn types are selectable for the one or more soft points.

In addition to one or more of the features described above or below, or as an alternative, further embodiments could include wherein the segments comprise rhumb lines, great-circle arcs, or both.

In addition to one or more of the features described above or below, or as an alternative, further embodiments could include wherein selecting the turn types from the turns library comprises selecting the turn types based on a shortest distance.

In addition to one or more of the features described above or below, or as an alternative, further embodiments could include autonomously controlling a vehicle on the route.

According to one or more embodiments, a system is provided. The system includes a processor and memory coupled to the processor and comprising computer-executable instructions that, when executed by the processor, cause the processor to perform operations. The operations include receiving points associated with a start location and a destination location, determining whether the points comprise one or more hard points, one or more soft points, or both, and determining at least one obstruction to avoid. A hard point represents a first location through which a route is to pass. A soft point represents a second location associated with a region, defined by a corresponding radius or distance from the second location, through which the route is to pass. Also, the operations include autonomously generating a route comprising the points and segments associated with the points, the segments comprising rhumb lines, great-circle arcs, or both. Generating the route comprises responsive to the points comprising the one or more soft points, avoiding the at least one obstruction by permitting a distance associated with the one or more soft points to be reached and adding at least one free waypoint. Generating the route comprises responsive to the points comprising the one or more hard points, avoiding the at least one obstruction by requiring the one or more hard points to be reached and adding the at least one free waypoint.

BRIEF DESCRIPTION OF THE DRAWINGS

The following descriptions should not be considered limiting in any way. With reference to the accompanying drawings, like elements are numbered alike:

FIG. 1 depicts a rotary wing aircraft in accordance with one or more embodiments;

FIG. 2 depicts a schematic diagram of a flight control system in accordance with one or more embodiments;

FIG. 3 depicts a schematic diagram of an example computing system having functions and features utilized in accordance with one or more embodiments;

FIG. 4 depicts an example global route in accordance with one or more embodiments;

FIG. 5 depicts a top view of the global route illustrated in FIG. 4 in accordance with one or more embodiments;

FIG. 6 depicts an example global route of a mission comprised of hard and soft via-points in accordance with one or more embodiments;

FIG. 7 depicts an example global route with turn waypoints to enforce desired turn types in accordance with one or more embodiments;

FIG. 8A depicts trajectory from a start location to a destination location using a rhumb line global plan in accordance with one or more embodiments;

FIG. 8B depicts trajectory from a start location to a destination location using a great circle global plan in accordance with one or more embodiments;

FIG. 9 depicts an example reference path in accordance with one or more embodiments;

FIG. 10 depicts an illustration of valid mapping between waypoints from various constructs starting from an example mission to a reference path in accordance with one or more embodiments;

FIG. 11 depicts a route with four segments overlaid with multiple turn choices in accordance with one or more embodiments;

FIG. 12 depicts an example turns library in accordance with one or more embodiments;

FIG. 13 depicts a flow chart of a method for autonomous global route planning among obstacles and control of an aircraft in accordance with one or more embodiments; and

FIG. 14 depicts a flow chart of a method for autonomously optimizing turns in a global route among obstacles and control of an aircraft in accordance with one or more embodiments.

DETAILED DESCRIPTION

A detailed description of one or more embodiments of the disclosed apparatuses are presented herein by way of exemplification and not limitation with reference to the Figures. One or more embodiments provide an autonomous local motion planner (which may include one or more algorithms) that commands a flight control system of an aircraft to follow a desired global path while avoiding obstacles and terrain.

FIG. 1 schematically illustrates an exemplary vertical takeoff and landing (VTOL) rotary wing aircraft 10 having a main rotor assembly 12. The aircraft 10 includes an airframe 14 having an extending tail 16 which mounts a tail rotor system 18, such as an anti-torque system, a translational thrust system, a pusher propeller, a rotor propulsion system, and the like. The main rotor assembly 12 includes a plurality of rotor blade assemblies 22 mounted to a rotor hub 20. The main rotor assembly 12 is driven about an axis of rotation A through a main gearbox (illustrated schematically at T) by one or more engines E. Although a particular helicopter configuration is illustrated and described in the disclosed embodiment, other configurations and/or machines, such as high speed compound rotary wing aircraft with supplemental translational thrust systems, dual contra-rotating, coaxial rotor system aircraft, tilt-rotors and tilt-wing aircraft, and fixed wing aircraft, will also benefit from embodiments of the invention.

Portions of the aircraft 10, such as the main rotor system 12 and the tail rotor system 18 for example, are driven by a flight control system 70 illustrated in FIG. 2. In one embodiment, the flight control system 70 is a fly-by-wire (FBW) control system. In a FBW control system, there is no direct mechanical coupling between a pilot's controls and movable components or control surfaces, such as rotor blade assemblies 20 or propeller blades 24 for example, of the aircraft 10 of FIG. 1. Instead of using mechanical linkages, a FBW control system includes a plurality of sensors 72 which can sense the position of controlled elements and generate electrical signals proportional to the sensed position. The sensors 72 may also be used directly and indirectly to provide a variety of aircraft state data to a flight control computer (FCC) 75. The FCC 75 may also receive pilot inputs 74 as control commands to control the lift, propulsive thrust, yaw, pitch, and roll forces and moments of the various control surfaces of the aircraft 10.

In response to inputs from the sensors 72 and pilot inputs 74, the FCC 75 transmits signals to various subsystems of the aircraft 10, such as the main rotor system 12 and the tail rotor system 18. The FCC 75 can use reference values in the pilot inputs 74 for feed forward control to quickly respond to changes in the reference values and can perform feedback control to reject disturbances detected via the sensors 72. Pilot inputs 74 can be in the form of stick commands and/or beeper commands to set and incrementally adjust reference values for controllers. The pilot inputs 74 need not be directly provided by a human pilot, but may be driven by an automatic pilot, a remote control, a navigation-based control, or one or more outer control loops configured to produce one or more values used to pilot the aircraft 10. The pilots inputs 74 can provide autonomous control of the aircraft 10 without human intervention and/or enable the aircraft 10 to be an optionally piloted vehicle.

The main rotor system 12 can include an actuator control unit 50 configured to receive commands from the FCC 75 to control one or more actuators 55, such as a mechanical-hydraulic actuator, for the rotor blade assemblies 20 of FIGS. 1 and 2. In an embodiment, pilot inputs 74 including cyclic and/or collective commands may result in the actuator control unit 50 driving the one or more actuators 55 to adjust a swashplate assembly to control the rotor blade assemblies 20 of FIG. 1. Alternatively, the FCC 75 can directly control the one or more actuators 55, and the actuator control unit 50 can be omitted.

The tail rotor system 18 can include an actuator control unit 60 configured to receive commands from the FCC 75 to control one or more actuators 65, such as a mechanical-hydraulic actuator, associated with one or more propeller blades 24. In an embodiment, pilot inputs 74 include a propeller pitch command for the actuator control unit 60 to drive the one or more actuators 65 for controlling the propeller blades FIG. 1. Alternatively, the FCC 75 can directly control the one or more actuators 65, and the actuator control unit 60 can be omitted.

The FCC 75 can also interface with an engine control system 85 including one or more electronic engine control units (EECUs) 80 to control the engines E. Each EECU 80 may be a digital electronic control unit such as Full Authority Digital Engine Control (FADEC) electronically interconnected to a corresponding engine E. Each engine E may include one or more instances of the EECU 80 to control engine output and performance. Engines E may be commanded in response to the pilot inputs 74, such as a throttle command.

Rather than simply passing pilot inputs 74 through to various control units 50, 60, and 80, the FCC 75 includes a processing system 90 that applies models and control laws to augment commands. The processing system 90 includes processing circuitry 92, memory 94, and an input/output (I/O) interface 96. The processing circuitry 92 can be any type or combination of computer processors, such as a microprocessor, microcontroller, digital signal processor, application specific integrated circuit, programmable logic device, and/or field programmable gate array, and is generally referred to as central processing unit (CPU) 92. The memory 94 can include volatile and non-volatile memory, such as random access memory (RAM), read only memory (ROM), or other electronic, optical, magnetic, or any other computer readable storage medium onto which data and control logic as described herein are stored. Therefore, the memory 94 is a tangible storage medium where instructions executable by the processing circuitry 92 are embodied in a non-transitory form. The I/O interface 96 can include a variety of input interfaces, output interfaces, communication interfaces and support circuitry to acquire data from the sensors 72, pilot inputs 74, and other sources (not depicted) and may communicate with the control units 50, 60, 80, and other subsystems (not depicted).

The FCC 75 also includes an autonomous global planner module 202 also referred to as global planner, an autonomous flight turns module 204, and library of flight turns 206 also referred to as a library of turns. The global planner module 202, flight turns module 204, and the turns library may be in and/or coupled to memory 94 to function as discussed herein. FIG. 3 depicts a schematic of an example computing system 312 having functions and features utilized according to one or more embodiments and will be discussed in greater detail later in the description.

The autonomous global planner module 202 and flight turns module 204 can be implemented as instructions stored on a computer-readable storage medium, as hardware modules, as special-purpose hardware (e.g., application specific hardware, Application Specific Integrated Circuits (ASICs), as embedded controllers, hardwired circuitry, etc.), or as some combination or combinations of these. In examples, the module described herein can be a combination of hardware and programming. The programming can be processor executable instructions stored on a tangible memory, and the hardware can include processing circuitry 92 for executing those instructions. Thus a system memory can store program instructions that when executed by processing circuitry 92 implement the module described herein. Alternatively or additionally, the FCC 75 can include dedicated hardware, such as one or more integrated circuits, Application Specific Integrated Circuits (ASICs), Application Specific Special Processors (ASSPs), Field Programmable Gate Arrays (FPGAs), or any combination of the foregoing examples of dedicated hardware, for performing the techniques described herein.

The global planner module 202 is configured to autonomously command the FCC 75 of the aircraft 10 to generate and/or follow a desired global path or global route while avoiding obstacles, terrain, etc., which can be generally referred to as obstructions. The flight turns module 204 determines the type of turns used to connect segments of the global route. The global route is a three-dimensional (3D) route, for example, having directions in an x, y, z coordinate system. The global planner module 202 is responsible for computing safe and dynamically feasible motion plans from a current vehicle state to a goal location. This is accomplished by providing constraints on known, unsafe airspace, such as obstructions, and constraints on feasible motion from a given vehicle model.

Particularly, the global planner module 202 is responsible for generating a global plan or global route to carry out a desired mission among no-fly zones (NFZs) and terrain. The global plan or route contains a sequence of waypoints, each of which specifies a geographic coordinate in three-dimensional airspace and a desired speed at which to approach. Global planning for aerial vehicles often involves large distances such as, for example, 100 to 1000 (or more) nautical miles. At these distances, flat earth assumptions are not valid. Therefore, the global planning algorithms of global planner module 202 have to support the non-flatness of the earth (i.e., a sphere). In addition, one factor that distinguishes global planning for aircraft or airplanes compared to cars or robot arms is that pilots prefer to fly a “simple” global path. This simplicity measure is subjective, but the global planner module 202 takes this to mean that the global planner module 202 should minimize the number of segments that will be connected to form the entire global plan.

According to one or more embodiments, the global planner module 202 is configured to address and/or avoid one or more issues associated with search-based and sample-based motion planning techniques. In sample-based or search-based planners, paths tend to be complicated with many short segments connected together, and attempting to simplify the path with shortcutting or other methods requires extra processing. The sample-based or search-based planners require a large and complex code base such as, k-dimensional tree (kd-tree), dynamic memory allocation, priority heap, etc. However, in accordance with one or more embodiments, the global planner module 202 utilizes an approach which is simpler and easier for software certification that is needed for flight vehicles. Further, unlike the global planner module 202, it is difficult to adapt sample-based or search-based planners to plan over long distances (e.g., 100 to 1000 (or more) nautical miles) considering a non-flat earth using latitude/longitude coordinates. The incremental construction of paths in these algorithms for sample-based or search-based planners does not intuitively extend to latitude/longitude coordinate system.

In accordance with one or more embodiments, the global planner module 202 configured with various functions. The global planner module 202 is configured such that the planning domain is specified in latitude and longitude coordinates (i.e., latitude/longitude). Latitude/longitude coordinates are the standard coordinate system that is used in aeronautics. The global planner module 202 is configured to specify routes over large distances with minimal parameterization and with primitives such as great-circle arcs and/or rhumb lines. The global planner module 202 is configured with the ability to specify the number of waypoints to further minimize parameterization of domain space and the produced global route. The global planner module 202 is configured with the ability to enforce takeoff and/or landing direction as well as takeoff and/or landing glide slope. Additionally, the global planner module 202 is configured with the ability to naturally enforce visitation of specific locations using hard via-points without the aid of heuristics and to handle moving no-fly zones within the optimization. As used herein, a hard via-point (also referred to herein as a hard point) represents a location to which, and/or through which, the aircraft (or vehicle) has to navigate or fly. In other words, a hard point represents a location through which a route of the aircraft or vehicle is to pass. For example, a hard point can refer to a location at which a delivery is to be made by the aircraft or vehicle, or a refueling site. The user/pilot can utilize one or more external devices 314 to input start location, destination location, waypoints (including hard via-points and soft via-points), takeoff and/or landing direction, takeoff and/or landing glide slope, etc., to global planner module 202. The global planner module 202 can receive, retrieve (e.g., from memory such as memory 94), and/or be uploaded with known obstructions such as terrain, no-fly zones, etc.

Further details regarding the global planner module 202 and flight turns module 204 are provided below, which can be executed and performed by FCC 75 of the flight control system 70. In one or more embodiments, the flight turns module 204 can be included in global planner module 202, and/or features of the flight turns module 204 can be integrated in the global planner module 202. Additionally, the global planner module 202 can include, call, and/or cause various algorithms to be executed according to one or more embodiments. The global route output by global planner module 202 can be utilized by FCC 75 of the flight control system 70 to command aircraft 10 and/or utilized by a local planner module (not shown) of FCC 75. The local planner module is designed to follow the global route using real time sensor data which allows the local planner module to react immediately to any previously unknown obstructions. Although specific examples and implementations are discussed below, these are provided for explanation purposes and not limitation. Additionally, sections/headings are utilized for ease of understanding and not limitation, and particularly Sections 1-8 are discussed below.

1. Example Global Routes Or Paths

Various waypoints in the mission and global route/plan are defined using the global planner module 202. Each waypoint specifies a geographic coordinate in three-dimensional airspace and a desired speed (either ground or air) at which to fly the aircraft 10. In accordance with embodiments, various types of waypoints are discussed below.

Via-points are visitations points which the operator (which could be a pilot) can specify, and the operator can input the via-points (as waypoints) to global planner module 202 of FCC 75. Accordingly, the visitation points are defined as via-points. Each via-point has a radius associated with it.

If the radius of a via-point is zero, then via-point is defined as a hard via-point. The operator can identify a via-point as a hard via-point. A hard via-point represents a location such that the global planner module 202 must fly or navigate aircraft 10 exactly to this location and/or through this location. A hard via-point can be a constraint for the global planner module 202. On the other hand, there are soft via-points. A soft via-point (also referred to herein as a soft point) is a via-point or location that has, or is associated with, a radius greater than zero that defines a region around the location. The global planner module 202 is allowed, or has to, to fly or navigate the aircraft 10 through the region defined around the location, e.g., near the soft via-point and within the specified radius. In other words, a soft point represents a location associated with a corresponding region, e.g., defined by a corresponding non-zero radius or distance from the location, and a route of the aircraft or vehicle has to pass through the region associated with the soft point. In one or more embodiments, the global planner module 202 presents the operator an option to specify the radius for a soft via-point. In one or more embodiments, the global planner module 202 is configured to utilize a predefined radius that is preset in advance. Also, the global planner module 202 can have a selection of radii that can be selected by the operator and/or selected by the global planner module 202.

Free waypoints are defined as the waypoints that are produced by the global planning algorithm of the global planner module 202 to enable obstacle avoidance. Free waypoints are not specified by the operator, i.e., not via-points. Turn waypoint are utilized to enforce a desired turn type for flying between two segments. The global planner module 202 can include turn waypoints in a global route as shown in FIG. 7 below. In the absence of turn waypoints, the aircraft's waypoint following flight control system could perform a turn type that might not be desired by the operator.

FIG. 4 depicts an example global route according to one or more embodiments. FIG. 5 depicts a top view of the global route in FIG. 4. As one illustrated example, the mission is to fly from a takeoff point with a given latitude, longitude, altitude, azimuth, and glide slope, fly at the given cruise altitude, and land at the landing point with a given latitude, longitude, altitude, azimuth, and glide slope. There can be a user-defined radius (as best seen in FIG. 5) in which the takeoff azimuth and landing azimuth are enforced. During the mission, static no-fly zones (NFZs), moving NFZs (MNFZs), and terrain should be avoided. FIGS. 4 and 5 illustrate a single via-point as a mandatory visitation point received by the global planner module 202, and this via point could be a soft via-point or hard via-point. The global planner module 202 is configured to insert free waypoints to avoid obstacles such as the no-fly zone and even the terrain.

FIG. 6 depicts a global route generated by global planner module 202. The global route of the mission is comprised of hard and soft via-points according to one or more embodiments. Free waypoints locations are controlled by the global planner module 202 and are used mainly to avoid collisions and/or obstacles. The soft and hard via-points can be input to the global planner module 202, and the global planner module 202 can generate a route that requires aircraft 10 to fly to each hard via-point. However, the global route is generated to have aircraft 10 to fly or navigate near the soft via-points, for example, within the radius of the soft via-points. The global planner module 202 can generate the global route to pass exactly through each hard point, and pass through each region associated with, or defined by a radius or distance from a corresponding soft point. Each soft point can be associated with its own radius and corresponding region. The radius can be non-zero or greater than zero. In FIG. 6, each hard point is illustrated with a hashed star with no circle around it, while each soft point is illustrated with hashed star having a circle around it to represent the corresponding region. An example of a hard point may be a landing or delivery location at which the aircraft (or vehicle) has to land or stop, for example, to make a delivery. An example of a soft point may be an antenna or transmitter that the aircraft (or vehicle) needs to communicate with at some point while on the route. As such, the aircraft (or vehicle) has to fly or navigate in the proximity (e.g., within a communication range) of the transmitter or antenna. As used herein, a hard point may imply a hard constraint and a soft point may imply a soft constraint with respect to point locations of the route to be generated.

In addition to via-points which can be hard or soft via-points and the free waypoints, FIG. 7 depicts turn waypoints included in the global plan to enforce desired turn types. As noted herein, the global planner module 202 can include the flight turns module 204 and/or be coupled to flight turns module 204. Accordingly, the global planner module 202 can determine the type of turn required by the aircraft to follow the global route. The global planner module 202 (and/or flight turns module 204) can determine that one type of turn can be utilized between two segments, and another type of turn can be utilized between other segments, based on whether the via-points are soft via-points versus hard via-points. To capture the non-flatness of the earth, the segments that constitute the global routes discussed herein are (or can be) great-circle arcs and/or rhumb lines as will be described in Section 2.

2. Obstructions: Static No-Fly Zones, Moving No-Fly Zones, and Terrain

The global planner module 202 is configured to check the collision of route segments in the global route against static no-fly zones (NFZ), moving NFZs (MNFZs), and terrain. MNFZs are intended to capture bad atmospheric conditions such as turbulence, tornados, storms, etc. As one example, the static NFZs may be modeled as 2.5 dimensional (D) polygonal prisms (which can be convex or concave) with a maximum altitude, although other types of models can be utilized. Cylindrical NFZs may be approximated with 2.5D polygons using the same algorithm for collision checking as polygonal NFZs. The moving NFZs can be modeled as 2D polygons (which can be convex or concave) with a speed and heading (V_(MNFZ), Ψ_(MNFZ)).

Terrain collision checking can be performed point-wise; this means that the route segments are discretized into points and checked against the terrain for collision. NFZ collision checking can be performed segment-wise. Performing NFZ collision checking segment-wise means that the entire segment of the route is checked against the NFZs without discretizing the segment. If the route has long segments, segment-wise checking is more efficient because a check is performed only once for a segment. In addition, segment-wise collision checking against polygonal prism NFZs can be done analytically.

3. Route Primitives

Planning in the latitude-longitude coordinate system lends itself to planning over long distances across earth. Every location on the surface of earth can be represented in

². Nevertheless, trajectories are to be provided that will connect the waypoints. According to one or more embodiments, the global planner module 202 can provide the operator two options, rhumb lines and great-circle arcs, as the route segment. Using a graphical interface presented to the operator/user by the global planner module 202, one of the two options for route segments is to be chosen prior to planning.

A rhumb line is defined as an arc crossing all meridians of longitude at the same angle. These paths are useful in navigation because they can be followed by maintaining constant bearing measured relative to true or magnetic north. While rhumb lines appear straight on a map using the Mercator projection, rhumb lines actually require constant steering to maintain. The rhumb line forms a spiral towards the north pole of navigation when planning over short distances, for example, less than and/or about equal to (≲) 500 nautical miles. However, rhumb lines may appear to be a poor choice over large distances where their sub-optimal total length can result in significant increases in flight time and fuel usage.

Regarding great-circle arcs, these trajectories represent the minimum distance path along the surface of the earth between any two locations. Great-circle arcs appear curved on a Mercator projection, but in fact they do not require any steering to follow. While appearing curved, when viewed on a globe the great circle arc resembles a straight line across the surface of the sphere. Great-circle arcs can be utilized for (all) long-distance global plans, and great circle arcs will not require any steering but will result in constantly changing bearing relative to true and magnetic north.

FIGS. 8A and 8B depict trajectories between New York and Anchorage that avoid a large highlighted obstacle. FIG. 8A illustrates a rhumb line global plan. FIG. 8B illustrates a great circle global plan. In FIGS. 8A and 8B, the single free waypoint is represented by a star. The rhumb line trajectory is straight on the Mercator projection, but is longer than the greatcircle arc option.

4. Example Problem Formulation 4.1 Waypoint Specification

Using global planner module 202, all paths (i.e., global routes) specified will be done so in terms of waypoints. A waypoint {right arrow over (w)} is described as follows

{right arrow over (w)}=[ν,μ,λ, h, ν,τ,d]  (1)

The variable v indicates the mission index of each waypoint and will be used to maintain order between waypoints within the same construct. The variables μ, λ are the geographic coordinates latitude and longitude respectively. The variables h, ν describe the altitude and tracked speed of the waypoint respectively. The waypoint type is represented by τ∈{hard, soft}. When the waypoint type given is soft, the distance at which this point can deviate from original location in the planned route is quantified by d. However, when the waypoint type given is hard, there is no distance for deviation and/or the distance d can be equal to zero (0).

4.2 Waypoint Constructs and Notation

Waypoints can be part of other structures that can contain multiple variants of them, such as the example matrix E below.

$\begin{matrix} {E = {\begin{bmatrix} {\overset{\rightarrow}{w}}_{1}^{E} \\ {\overset{\rightarrow}{w}}_{2}^{E} \\  \vdots \\ {\overset{\rightarrow}{w}}_{e}^{E} \end{bmatrix} = \begin{bmatrix} \left\lbrack {v_{1}^{E},\mu_{1}^{E},\lambda_{1}^{E},h_{1}^{E},v_{1}^{E},\tau_{1}^{E},d_{1}^{E}} \right\rbrack \\ \left\lbrack {v_{2}^{E},\mu_{2}^{E},\lambda_{2}^{E},h_{2}^{E},v_{2}^{E},\tau_{2}^{E},d_{2}^{E}} \right\rbrack \\  \vdots \\ \left\lbrack {v_{e}^{E},\mu_{e}^{E},\lambda_{e}^{E},h_{e}^{E},v_{e}^{E},e_{e}^{E},d_{e}^{E}} \right\rbrack \end{bmatrix}}} & (2) \end{matrix}$

Each capital bold letter represents a matrix of waypoints and the number of rows for this matrix will be a lower case version of the same letter. Here E is a waypoint matrix with e rows or waypoints. At times, it will be necessary to refer to specific variables inside of the matrix explicitly. Any variable that has an upper case bold superscript belongs to the matrix with matching symbol (unless otherwise noted). Likewise, the subscript of such a variable marks its row along the matrix. For example, the waypoint {right arrow over (W)}₁ ^(E) belongs to the first row of matrix E because its superscript is E and its subscript is 1. One exception to this rule is for variables that are associated with specific rows of the waypoint matrix, but are not contained within the waypoint matrix. For example, variable θ₂ ^(E) can represent the angular polar coordinate for a waypoint in matrix E at row 2.

4.3 Mission Specification

A mission may be defined as a list of waypoints of varying type, from which the global planner module 202 is expected to generate a plan that connects them. The list of waypoints can be described as a mission matrix M below.

$\begin{matrix} {M = \begin{bmatrix} {\overset{\rightarrow}{w}}_{1}^{M} \\ {\overset{\rightarrow}{w}}_{2}^{M} \\  \vdots \\ {\overset{\rightarrow}{w}}_{m}^{M} \end{bmatrix}} & (3) \end{matrix}$

For the mission, it is assumed that mission index of each waypoint is the row number (ν_(i) ^(M)=i). The mission matrix M can be further subdivided into two lists, one for a hard via-points and the other for b soft via-points. As recalled from above, A and B are the matrices and a and b are the number of rows for those matrices. By coincidence, the number of rows is also the number of waypoints a and b.

$\begin{matrix} {A = \begin{bmatrix} {\overset{\rightarrow}{w}}_{1}^{A} \\ {\overset{\rightarrow}{w}}_{2}^{A} \\  \vdots \\ {\overset{\rightarrow}{w}}_{a}^{A} \end{bmatrix}} & (4) \\ {B = \begin{bmatrix} {\overset{\rightarrow}{w}}_{1}^{B} \\ {\overset{\rightarrow}{w}}_{2}^{B} \\  \vdots \\ {\overset{\rightarrow}{w}}_{b}^{B} \end{bmatrix}} & (5) \end{matrix}$

Where A and B are the lists containing information exclusive to either hard or soft via-points respectively.

{right arrow over (w)} _(i) ^(A)={right arrow over (w)}_(j) ^(M)|∀i∈{1 . . . a}, ∃j ∈{1 . . . m}, τ_(i) ^(A)=hard   (6)

{right arrow over (w)} _(i) ^(B)={right arrow over (w)}_(j) ^(M)|∀i∈{1 . . . b}, ∃j ∈{1 . . . m}, τ_(i) ^(B)=soft   (7)

In maintaining the mission index v, an element at row i in either list is a copy of the via-point at row ν_(i) in M. It is assumed that both lists maintain the same relative ordering as the mission such that ν_(i) ^(A)>ν_(i-1) ^(A) and ν_(i) ^(B)>ν_(i-1) ^(B). This also enforces uniqueness.

4.4 Free Waypoint Specification

Separate from the two matrices (e.g., matrices A and B) that specify mission waypoints is the matrix c of free moving waypoints (i.e., free waypoints)

$\begin{matrix} {C = \begin{bmatrix} {\overset{\rightarrow}{w}}_{1}^{C} \\ {\overset{\rightarrow}{w}}_{2}^{C} \\  \vdots \\ {\overset{\rightarrow}{w}}_{c}^{C} \end{bmatrix}} & (8) \end{matrix}$

where ν_(i) ^(C) will denote the mission waypoint index that each free waypoint is assigned to. Since the inventors expect the generated path to begin and end at the first and last mission waypoints, it is assumed that no free waypoint is assigned to the last waypoint index (ν_(c) ^(C)<m). Regardless of how mission indices are specified for free waypoints, the mission indices for free waypoints are done so in order with the obvious difference being that two subsequent free waypoints can be assigned to the same index (ν_(i) ^(C)>ν_(i-1) ^(C)). It is noted that an example illustration of waypoint mapping between constructs is provided in FIG. 10 and will be discussed further below.

4.5 State Specification

The state will contain (only) the points that can be moved by the global planner module 202 during the optimization process in the appropriate parameterization. Thus far, there are only two: free waypoints and soft via-points. In the state space, a free waypoint is described by its geographic (latitude/longitude) coordinates μ^(C),λ^(C). To capture the distance constraints of soft via-points from their original locations through the domain, polar coordinates δ^(B),θ^(B) are used instead.

A state vector representing c free waypoints and b soft via-points are specified as below.

$\begin{matrix} {\overset{\rightarrow}{x} = \begin{bmatrix} \mu_{1}^{C} \\ \lambda_{1}^{C} \\ \mu_{2}^{C} \\ \lambda_{2}^{C} \\  \vdots \\ \mu_{c}^{C} \\ \lambda_{c}^{C} \\ \delta_{1}^{B} \\ \theta_{1}^{B} \\ \delta_{2}^{B} \\ \theta_{2}^{B} \\  \vdots \\ \delta_{b}^{B} \\ \theta_{b}^{B} \end{bmatrix}} & (9) \end{matrix}$

where δ_(i),θ_(i)=polar(μ_(i), λ_(i), μ_(o) _(i) , λ_(o) _(i) ). The inventors define the function polar(μ, λ, μ_(o), λ_(o)):

⁴→

² where polar (μ, λ, μ_(o), λ_(o)) retrieves the polar coordinates of μ,λ with respect to a point with coordinates μ_(o),λ_(o) or the original location. The existence of an additional soft via-point matrix BO that retains the original coordinates of B is assumed.

Similarly, two vectors that specify the domain of the state vector can be described as follows.

$\begin{matrix} {{\overset{\rightarrow}{x}}_{lb} = \begin{bmatrix} \mu_{\min} \\ \lambda_{\min} \\  \vdots \\ {\times c} \\ 0 \\ 0 \\ {\times b} \end{bmatrix}} & (10) \\ {{\overset{\rightarrow}{x}}_{ub} = \begin{bmatrix} \mu_{\max} \\ \lambda_{\max} \\  \vdots \\ {\times c} \\ d_{1}^{B} \\ {2\pi} \\ d_{2}^{B} \\ {2\pi} \\  \vdots \\ d_{b}^{B} \\ {2\pi} \end{bmatrix}} & (11) \end{matrix}$

In the above, {right arrow over (x)}_(lb) and {right arrow over (x)}_(ub) specify the lower and upper bounds of the domain constraints imposed on {right arrow over (x)} respectively. The variable d_(i) ^(B) is the d value (or distance limit) of {right arrow over (w)}_(i) in B and μ_(min),μ_(max),λ_(min),λ_(max) define the spatial boundaries for free waypoints.

4.6 Reference Path Specification

Using the global planner module 202, a reference path (as depicted in FIG. 9) can be thought of as a sequence of arbitrary waypoints that are not required to adhere to any non-holonomic constraints typical for helicopters at forward flight. Such a path can be constructed by merging the three sequences of points in A, B, C in order of v_(i) to form a matrix with rows r=a+b+c.

$\begin{matrix} {R = {{f_{R}\left( \overset{\rightarrow}{x} \right)} = \begin{bmatrix} {\overset{\rightarrow}{w}}_{1}^{R} \\ {\overset{\rightarrow}{w}}_{2}^{R} \\  \vdots \\ {\overset{\rightarrow}{w}}_{r}^{R} \end{bmatrix}}} & (12) \end{matrix}$

where ƒ_(R)(x) is a function that retrieves the reference path matrix R from a given state vector {right arrow over (x)}. Internally, ƒ_(R)({right arrow over (x)}) updates the values of B and C from r before merging. Each waypoint in R maps to a waypoint in one of the other matrices. In other words,

(13)   (13)

A proper construction of R ensures that all points are laid out in order and that no duplicates are provided.

ν_(i) ^(R)>ν_(i-1) ^(R) |∀i∈{2, . . . , rows(R)}, τ_(i) ^(R)≠free   (14)

ν_(i) ^(R)=ν_(i-1) ^(R) |∀i∈{2, . . . , rows(R)}, τ_(i) ^(R)=free   (15)

{right arrow over (w)} _(i) ^(R) ≠{right arrow over (w)} _(j) ^(R) |∀i∈{1 . . . rows(R)}, ∀j∈{1 . . . rows(R)}, i≠j   (16)

FIG. 9 depicts an example of such a reference path with three via-points and four free waypoints. Particularly, the reference path has three via-points and two free waypoints between each pair of via-points in this example. The reference path is a collection of route segments, and there is motion path discussed in Section 4.8 below. The motion path adds all the turns to the reference path so that a flyable global route is generated. The global route denotes the final product of the global route planner module 202.

4.7 Segment Specification

A segment is defined as a continuous path between two waypoints. The types of segments which are assume relevant for planning around the globe are rhumb lines S_(rh)({right arrow over (w)}_(i), {right arrow over (w)}_(j)) and great-circle arcs S_(gc)({right arrow over (w)}_(i), {right arrow over (w)}_(j)). For the remainder of the document, either can be referred to by S({right arrow over (w)}_(i), {right arrow over (w)}_(j)). A waypoint along a given segment is defined as {right arrow over (w)}_(i,j,α)=S({right arrow over (w)}_(i),{right arrow over (w)}_(j),α), where α∈[0,1] indicates the progress along the segment. Likewise, the original waypoint pair can be retrieved via extreme values of α ({right arrow over (w)}_(i)=S({right arrow over (w)}_(i), {right arrow over (w)}_(j), 0)∧{right arrow over (w)}_(j)=S({right arrow over (w)}_(i), {right arrow over (w)}_(j), 1)).

4.8 Motion Path Specification

Tracking of the reference path may not be ideal for a vehicle with non-holonomic constraints. In the case of a helicopter, such non-holonomic constraints are due to the dynamic limitations of the target vehicle (such as limited climb rate and bank angle). Any global path generated by the global motion planner module 202 is expected to adhere to these constraints. To ensure such constraints are followed, the global planner module 202 generates another ordered set of waypoints from the first called a motion path.

$\begin{matrix} {O = {{f_{o}\left( \overset{\rightarrow}{x} \right)} = \begin{bmatrix} {\overset{\rightarrow}{w}}_{1}^{O} \\ {\overset{\rightarrow}{w}}_{2}^{O} \\  \vdots \\ {\overset{\rightarrow}{w}}_{o}^{O} \end{bmatrix}}} & (17) \end{matrix}$

In the above, O is another waypoint matrix (i.e., motion path matrix) with rows o, and η_(o)({right arrow over (x)}) is a function that generates on ordered set of waypoints which adhere to an approximation of the dynamic limitations of the target platform while following the sequence of waypoints inside of R in order. While there are multiple ways this could be implemented, Motion Path Generation in Section 7 provides one example for explanation purposes.

Returning to FIG. 10, depicted is an illustration of valid mapping between waypoints from various constructs starting from an example mission M to a reference path R. Cell values indicate the mission waypoint index v assigned. Colors are used to indicate mappings where red is for hard via-points, green is for soft via-points, and blue is for free waypoints. The example mission is comprised of three hard via-points which are identified by indices of 1, 3, 4, and 7 and three soft via-points which are identified by indices 2, 5, and 6. These are mapped to A and B respectively and in order. There are four free waypoints each of which is assigned a mission index value ν corresponding to an entry in M. When mapped to R all entries are inserted in order by their mission indices ν.

The mapping shown in FIG. 10 illustrates how global planner module 202 maps the mission matrix M to hard via-points matrix A and soft via-point matrix B. Further, global planner module 202 maps waypoints in hard via-points matrix A and soft via-point matrix B and waypoints in free moving waypoints matrix C to a generated reference path matrix R. The free waypoints do not map back to the mission M because the free waypoints are additionally inserted as determined by global planner module 202. By design reference path matrix R does not account for the dynamics or flight capabilities of the aircraft 10. In order to ensure the dynamics or flight capabilities of the aircraft 10 are accounted for or adhered to, the global planner module 202 is configured to find a motion path matrix O (as illustrated in example Algorithm 3 for motion path generation) that correlates to reference path matrix R.

4.9 Waypoint Over Time Specification

To describe collision free traversal of a path near dynamic obstacles over a fixed timespan for global planner module 202, a function {right arrow over (w)}_(t)=ƒ_(w)(O, t) is defined where {right arrow over (w)}_(t) contains the expected location of a vehicle following motion path O starting from {right arrow over (w)}₁ ^(O) and t∈[0, duration(O)] is the duration of time that has transpired.

4.10 Route Optimization Problem

The objective of global planner module 202 is to find the shortest obstruction free path along a sequence of via-points in mission matrix M. The overall problem can be written as

${\overset{\rightarrow}{x^{*}} = {{\underset{\overset{\rightarrow}{x}}{\arg}\min{\sum\limits_{i = 1}^{r}{{dist}\left( {S\left( {{\overset{\rightarrow}{w}}_{i}^{R},{\overset{\rightarrow}{w}}_{i + 1}^{R}} \right)} \right)}}} + {\sum\limits_{i = 1}^{o}{{dist}\left( {S\left( {{\overset{\rightarrow}{w}}_{i}^{O},{\overset{\rightarrow}{w}}_{i + 1}^{O}} \right)} \right)}}}}{{{subject}{to}\overset{\rightarrow}{x}} \geq {\overset{\rightarrow}{x}}_{lb}}{\overset{\rightarrow}{x} \leq {\overset{\rightarrow}{x}}_{ub}}\left. R\leftarrow{f_{R}\left( \overset{\rightarrow}{x} \right)} \right.\left. O\leftarrow{f_{O}\left( \overset{\rightarrow}{x} \right)} \right.{{{S\left( {{\overset{\rightarrow}{w}}_{j}^{O},{\overset{\rightarrow}{w}}_{j + 1}^{O},\alpha} \right)} \notin {NFZs}},{\forall{\alpha \in \left\lbrack {0,1} \right\rbrack}},{\forall{j \in \left\{ {1,\ldots,{o - 1}} \right\}}}}{{{S\left( {{\overset{\rightarrow}{w}}_{j}^{O},{\overset{\rightarrow}{w}}_{j + 1}^{O},\alpha} \right)} \notin {Terrian}},{\forall{\alpha \in \left\lbrack {0,1} \right\rbrack}},{\forall{j \in \left\{ {1,\ldots,{o - 1}} \right\}}}}{{{f_{w}\left( {O,t} \right)} \notin {{Moving\_ NFZs}(t)}},}$

where dist(S({right arrow over (w)}_(x), {right arrow over (x)}_(y))) is the length of the segment between points {right arrow over (w)}_(x) and {right arrow over (w)}_(y). The objective function

$\left( {\overset{\rightarrow}{x^{*}} = {{\underset{\overset{\rightarrow}{x}}{\arg}\min{\sum_{i = 1}^{r}{{dist}\left( {S\left( {{\overset{\rightarrow}{w}}_{i}^{R},{\overset{\rightarrow}{w}}_{i + 1}^{R}} \right)} \right)}}} + {\sum_{i = 1}^{o}{{dist}\left( {S\left( {{\overset{\rightarrow}{w}}_{i}^{O},{\overset{\rightarrow}{w}}_{i + 1}^{O}} \right)} \right)}}}} \right)$

aims to minimize the total length of both the reference and motion path combined. This is done to mitigate potential path artifacts when optimizing exclusively over one. While the reference path is only used for computation of path cost, the motion path is checked for collisions between no-fly zones (NFZ) and terrain. For moving NFZs, the parameterization is written in terms of time over the entire route instead of between individual segments.

5. Global Optimization Via Particle Swarm Optimization

The optimization problem described in Section 4.10 may not be convex. In other words, there may be many local minima, making it difficult to find the true global minimum. This requires that the global optimizer of the global planner module 202 be used to perform the minimization. As one example, particle swarm is utilized as a global optimization function, and the particle swarm has added benefit for its simplicity and performance. It should be appreciated that any other global optimization function can be easily substituted if desired, and particle swarm is illustrated for explanation purposes. Other example global optimization functions may include genetic algorithm, simulated annealing, and ant colony optimization. Further, regarding the algorithm is discussed below.

5.1 Particles Representation

Particle Swarm Optimization (PSO) (reference can be made to the following: J. Kennedy and R. Eberhart, “Particle swarm optimization,” Proceedings of ICNN'95—International Conference on Neural Networks, Perth, W A, Australia, 1995, pp. 1942-1948 vol. 4.) requires that a population, or swarm, of candidate solutions {right arrow over (x)} be maintained. Each candidate solution is called a particle. Each particle has an associated cost. The particles are moved around the search space according to rules that will be explained in the next section. In the example global planning problem, each particle is a state vector defined in Equation 9 with lower and upper bounds defined in Equations 10 and 11 respectively.

5.2 Particle Swarm Optimization Algorithm 5.2.1 Overview of Basic Particle Swarm

Algorithm 1 below shows a PSO variant that can be utilized by global planner module 202. It is assumed that the input vector {right arrow over (x)} has length n_(var) (i.e., {right arrow over (x)}∈

^(n) ^(var) ). The swarm has n_(particles) particles. Particle i∈{1,2, . . . , n_(particles)} has position {right arrow over (x)}_(i), and it also has a velocity {right arrow over (ν)}_(i)∈

^(n) ^(var) . As the position of the particle moves around the search space, its best position (i.e., position with lowest cost f ({right arrow over (x)}_(i))) is remembered as {right arrow over (p)}_(i). The best position found by the entire swarm is {right arrow over (g)}. Vectors {right arrow over (x)}_(lb) and {right arrow over (x)}_(ub)∈

^(n) ^(var) represent the lower and upper bounds, respectively, on each of the variables. In Algorithm 1, the three parameters ω, ϕ_(p), and ϕ_(g) are each set to the default value of 1, but they can be tuned as desired. Regarding convergence, the Particle Swarm algorithm is considered complete (i.e., termination criteria on line 9) when one of two conditions are met:

1. The maximum number of iterations n iter max is exceeded.

2. More than n_stall_iter_max iterations have passed without improvement in the cost of the solution. The global planner module 202 considers the cost improved only if ƒ({right arrow over (x)}_(best))−ƒ({right arrow over (x)}_(current))>stall_threshold.

ALGORITHM 1 BASIC PARTICLE SWARM OPTIMIZATION [3] 1: for each particle i = 1, 2, . . . , n_(particles) do 2:   ${\underset{x}{\rightarrow}}_{i}{\sim {U\left( {{\underset{x}{\rightarrow}}_{lb}{,{\underset{x}{\rightarrow}}_{ub}}} \right)}}$  

Initialize the particle’s position with a uniformly distributed  random vector 3:   $\left. {\underset{p}{\rightarrow}}_{i}\leftarrow{\underset{x}{\rightarrow}}_{i} \right.$  

Initialize the particle's best known position to it's initial position 4:   ${{if}{f\left( {\underset{p}{\rightarrow}}_{i} \right)}} < {f\left( \underset{g}{\rightarrow} \right){then}}$ 5:   $\left. \underset{g}{\rightarrow}\leftarrow{\underset{p}{\rightarrow}}_{i} \right.$  

Update the swarm’s best known position 6:   end if 7:    ${vi} \sim {U\left( {{- \left| {{\underset{x}{\rightarrow}}_{ub}{- {\underset{x}{\rightarrow}}_{lb}}} \right|},\left| {{\underset{x}{\rightarrow}}_{vb}{- {\underset{x}{\rightarrow}}_{lb}}} \right|} \right)}$   

Initialize the particle’s velocity 8:  end for 9:  while a termination criterion is not met do 10:    for each particle i = 1, 2, ... , n_(particles) do 11:     for each dimension j = 1, 2, ... , n_(var) do 12:      r_(p), r_(g)~U(0,1)

Pick random numbers 13:      v_(i,j) ← w_(vi,d) + Φ_(p)r_(p)(p_(i,d) − x_(i,d)) + Φ_(g)r_(g) (g_(d) − x_(i,d))       

Update the particle’s velocity 14:       $\left. {\underset{x}{\rightarrow}}_{i}\leftarrow{\underset{x}{\rightarrow}}_{i}{+ {\underset{v}{\rightarrow}}_{i}} \right.$      

Update the particle’s position 15:       ${{if}{f\left( {\underset{x}{\rightarrow}}_{i} \right)}} < {f\left( {\underset{p}{\rightarrow}}_{i} \right){then}}$ 16:        $\left. {\underset{p}{\rightarrow}}_{i}\leftarrow{\underset{x}{\rightarrow}}_{i} \right.$       

Update the particle’s best known position 17:        ${{if}{f\left( {\underset{p}{\rightarrow}}_{i} \right)}} < {f\left( \underset{g}{\rightarrow} \right){then}}$ 18:         $\left. \underset{g}{\rightarrow}\leftarrow{\underset{p}{\rightarrow}}_{i} \right.$        

Update the swarm’s best known position 19:      end if 20:     end if 21:    end for 22:   end for 23:  end while

5.2.2 Hybrid PSO Algorithms

In general, particle swarm often returns a solution near the global optimum. However, the global planner module 202 can use a local (convex) optimizer to often improve this solution a non-trivial amount. For this reason, a hybrid algorithm is created by running a local optimizer after particle swarm has terminated. The local optimizer uses the solution from particle swarm as the initial estimation (i.e., guess) and improves on that solution if possible. Examples of various local optimization algorithms that can be used include a gradient-based nonlinear programming solver or a search-based nonlinear programming solver such as Nelder-Mead Simplex Search.

5.2.3 Locust Swarm

Additionally and/or alternatively, Locust swarm algorithms (reference can be made to the following: Stephen Chen, “Locust swarms-a new multi-optima search technique”. In 2009 IEEE Congress on Evolutionary Computation, pages 1745-1752. IEEE, 2009) can be utilized by global planner module 202. A Locust swarm algorithm reuses previous swarm solutions in subsequent particle swarms, thus improving the likelihood of finding a reasonably close solution. Locust swarm introduces two new concepts to particle swarm.

1. Instead of just initializing n_(particles) particles by placing them randomly in the search space, the global planner module 202 generates n_(random) random positions in the search space where n_(random)>>n_(particles). Then, the global planner module 202 evaluates the cost of each random position and only chooses the best n_(particles) positions as particles. In this way, the global planner module 202 starts off the particle swarm with better particles that will more quickly converge to the optimum.

2. The global planner module 202 runs multiple particle swarms in series. The best solution from the previous particle swarm informs the initialization of the position and velocity of particles in subsequent swarms.

5.2.4 Monotonically Contracting Particle Swarm Optimization (MC-PSO)

Through visualization of the particles during runs of Locust Swarm it was observed that subsequent swarms may not necessarily benefit from previous solutions, but may diverge from the best solution found thus far among all subsequent swarms. This is due to algorithm's choice of sampling near the previous swarm solution, while not accounting for the possibility of converging to a worse solution. As a result, subsequent swarms could converge to increasingly worse solutions, as the sampling region is reduced. To address the issues observed in Locust Swarm Optimization, the inventor developed MC-PSO for global planner module 202, borrowing some of the ideas of the former presented, such as choosing the best initial samples and reusing previous swarm solutions.

As depicted below, Algorithm 2 illustrates an implementation of MC-PSO for the global planner module 202. For the sake of clarity and ease of understanding, it is noted that some optimizations are overlooked (or ignored) in order to have a logical flow that is consistent with the algorithms previously discussed. In Algorithm 2, lines 1 through 3 initialize the variables used to track the best swarm solution found thus far and how many swarms have found a solution. A solution is defined to be found by a single swarm if it converges to a viable solution. Non-viable solutions will have a cost of infinity (inf). In Algorithm 2, line 5 computes a scaling factor that will be used when perturbing (moving) samples away from the best swarm solution seen thus far. In Algorithm 2, lines 7 through 11 initialize the set of particle samples. If a solution has yet to be found, the set of particle samples is sampled from a uniform distribution. Otherwise, the set of particle samples is all set to the previous solution. The initial velocities of the particles are chosen in lines 19 through 23. Perturbation of particles away from the previous best swarm solution are controlled (solely) by the scaling of the initial velocities. For this scaling to work as intended, a particle's position is now updated before its velocity on lines 29 through 30 in Algorithm 2. In Algorithm 2, line 41 through 47 update the best swarm solution found thus far and how many swarms were successful in finding a viable solution.

With regard to convergence, the global planner module 202 considers the Monotonically Contracting Swarms algorithm complete (termination criteria on line 4 of Algorithm 2) when one of two conditions are met:

1. The maximum number of swarms n_(swarms_max) is exceeded.

2. More than n_(swarms_max) swarms have converged without improvement in the cost of the solution. The cost is considered improved only if ƒ_(best)−ƒ({right arrow over (g)})>swarm_stall_threshold.

Algorithm 2 Monotonically Contracting Particle Swarm Optimization (MC-PSO)  1:  fbest ← inf  2:  {right arrow over (g)} best ← 0  3:  n_(swarms)_found ← 0  4:  while a termination criterion is not met do  5:   pertubation_factor ← 1 · (n_(swarms)_found/n_(swarms)_max)

 Reduce perturbation for each success  6:   for each sample i = 1, 2, . . . , n_(samples) do  7:    if fbest = inf then 

 If no swarm has been found yet  8:     ${\underset{x}{\rightarrow}}_{i}{{\sim{U\left( {{\underset{x}{\rightarrow}}_{lb}{,{\underset{x}{\rightarrow}}_{ub}}} \right)}} \vartriangleright {{I{nitialize}}{the}{{sample}'}s{position}{uniformly}}}$  9:    else 10:     $\left. {\underset{x}{\rightarrow}}_{i}\leftarrow{g_{best} \vartriangleright {{Set}{the}{{sample}'}s{position}{to}{the}{best}{found}}} \right.$ 11:    end if 12:   end for 13:    ${{sort}\underset{x}{\rightarrow}0},{\ldots\underset{x}{\rightarrow}{{n_{samples}:{f\left( {\underset{x}{\rightarrow}}_{a} \right)}} < {f\left( {\underset{x}{\rightarrow}}_{b} \right)} \vartriangleright {{Sort}{samples}{by}{least}{cost}}}}$ 14:   for each particle i = 1, 2, . . . , n_(particles) do 15:     $\left. {\underset{p}{\rightarrow}}_{i}\leftarrow{\underset{x}{\rightarrow}}_{i}{\vartriangleright {{Initialize}{the}{{particle}'}s{position}{from}{the}{best}{sample}}} \right.$ 16:     ${{if}{f\left( {\underset{p}{\rightarrow}}_{i} \right)}} < {{f\left( \underset{g}{\rightarrow} \right)}{then}}$ 17:    $\left. \underset{g}{\rightarrow}\leftarrow{\underset{p}{\rightarrow}}_{i}{\vartriangleright {{Update}{the}{{swarm}'}s{best}{known}{position}}} \right.$ 18:    end if 19:    if fbest = inf then 

 If no swarm has been found yet 20:     ${\left. {vi} \right.\sim{U\left( {{- {❘{{\underset{x}{\rightarrow}}_{ub}{- {\underset{x}{\rightarrow}}_{lb}}}❘}},{❘{{\underset{x}{\rightarrow}}_{ub}{- {\underset{x}{\rightarrow}}_{lb}}}❘}} \right)}} \vartriangleright {{Initialize}{the}{{particle}'}s{velocity}{from}{uniform}{distribution}}$ 21:    else 22:     ${\left. {vi} \right.\sim{U\left( {{- {❘{{\underset{x}{\rightarrow}}_{ub}{- {\underset{x}{\rightarrow}}_{lb}}}❘}},{❘{{\underset{x}{\rightarrow}}_{ub}{- {\underset{x}{\rightarrow}}_{lb}}}❘}} \right)}} \vartriangleright {{Initialize}{away}{from}{best}{solution}}$ 23:    end if 24:   end for 25:  while a termination criterion is not met do 

 Individual swarm iteration 26:   for each particle i = 1, 2, . . . , n_(particles) do 27:    for each dimension j = 1, 2, . . . , n_(var) do 28:     r_(p), r_(g)~U (0, 1)

 Pick random numbers 29:      $\left. {\underset{x}{\rightarrow}}_{i}\leftarrow{\underset{x}{\rightarrow}}_{i}{{+ v_{i}} \vartriangleright {{Update}{the}{{particle}'}s{position}}} \right.$ 30:      $\left. v_{i,j}\leftarrow{{{{wv}_{i,d}\Phi_{p}{r_{p}\left( {{P_{i,d} -}{\underset{x}{\rightarrow}}_{i,d}} \right)}} + {\Phi_{g}{r_{g}\left( {{g_{d} -}{\underset{x}{\rightarrow}}_{i,d}} \right)}}} \vartriangleright {{Update}{the}{{particle}'}s{position}}} \right.$ 31:      ${{if}{f\left( {\underset{x}{\rightarrow}}_{i} \right)}} < {{f\left( {\underset{p}{\rightarrow}}_{i} \right)}{then}}$ 32:      $\left. {\underset{p}{\rightarrow}}_{i}\leftarrow{\underset{x}{\rightarrow}}_{i}{\vartriangleright {{Update}{the}{{particle}'}s{best}{known}{position}}} \right.$ 33:       ${{if}{f\left( {\underset{p}{\rightarrow}}_{i} \right)}} < {{f\left( \underset{g}{\rightarrow} \right)}{then}}$ 34:      $\left. \underset{g}{\rightarrow}\leftarrow{\underset{p}{\rightarrow}}_{i}{\vartriangleright {{Update}{the}{{swarm}'}s{best}{known}{position}}} \right.$ 35:      end if 36:     end if 37:    end for 38:   end for 39:  end while 40:   $\left. g\leftarrow{{{nelder\_ mead}\left( \underset{g}{\rightarrow} \right)} \vartriangleright {{Improve}{solution}{with}{Nelder} - {Mead}}} \right.$ 41:   ${{if}{f\left( \underset{g}{\rightarrow} \right)}} < {\inf{then}}$ 42:   n_(swarms)_found ← n_(swarms)_found + 1 

 Increment number of successful swarms 43:  end if 44:  if f(g) < fbest then 

 If better swarm cost has been found, update best solution 45:    $\left. {fbest}\leftarrow{f\left( \underset{g}{\leftarrow} \right)} \right.$ 46:    $\left. \underset{g}{\rightarrow}{best}\leftarrow\underset{g}{\rightarrow} \right.$ 47:  end if 48:  end while 49:  return gbest

6. Free Waypoint Adjustment

Among a free waypoint's parameters detailed in Section 4, only a few are directly controlled by the optimizer of the global planner module 202 as part of the planning state (described in Section 5). Methods used to populate the remainder of the relevant set of particle samples are detailed below.

6.1 Mission Indices

Prior to optimization, free waypoints are assigned by global planner module 202 to mission waypoint indices ν_(i) as evenly as possible among all segments if the number of segments is less than or equal to (c≥m−1) the free waypoints. When there are fewer free waypoints available, the free waypoints are subdivided among the m−1 segments with the largest distances. This strategy assumes that it is more likely that the path will require a detour over greater distances than shorter ones.

6.2 Altitude

The altitude of a free waypoint is set from the mean altitude of the mission waypoints along its designated segment. In other words,

h_(i)^(C) = (h_(v_(i)^(C))^(M) + h^(i)x_(v_(i)^(C) + 1))/2

where h_(ν) _(i) _(c) ^(M) indicates the altitude of a waypoint in M at row ν_(i) ^(C).

6.2.1 Cruise Altitude

When specified, the altitude of all free waypoints could be set to a single cruise speed. This functionality is not currently utilized in the example.

6.3 Speed

The tracked speed of a free waypoint is set as the speed of the second (or subsequent) waypoint along its designated segment, unless that speed is 0. In other words,

$v_{i}^{C} = \left\{ \begin{matrix} v_{v_{i}^{C_{+ 1}}}^{M} & {v_{v_{i}^{C_{+ 1}}}^{M} \neq 0} \\ v_{v_{i}^{C}}^{M} & {otherwise} \end{matrix} \right.$

where a superscript indicates the source matrix, (either C or M) and a subscript indicates the row along that matrix where the variable is defined.

6.3.1 Cruise Speed

When specified, the tracked speed of all free waypoints could be set to a single cruise speed. This functionality is currently not utilized in the example.

7. Motion Path Generation

Given a reference path (e.g., Section 4.6), a motion path (e.g., Section 4.8) is created by stitching together a series of motion primitives that approximately model the dynamics of the target platform with the intent to track the reference path. Motion primitives define each action cable of being taken by aircraft 10. In other words, the global planner module 202 finds motion suitable for aircraft 10 to fly the reference path. As an example, the global planner module 202 is configured to accomplish the process as discussed below. At any given time while tracking the reference path, the vehicle will be expected to either:

1) climb/descend and/or adjust forward speed, and/or

2) perform a turn.

In so doing, the global planner module 202 can reduce the power requirements imposed on a rotorcraft that would otherwise have to reserve enough for both (say turning while climbing). As depicted below, Algorithm 3 describes the procedure with some detail omitted for the sake of brevity and ease of understanding.

To connect motions together, a single point (fi{right arrow over (r)}st) is used to track where the next motion primitive will start. On line 3 of Algorithm 3, fi{right arrow over (r)}st is copied from the starting point on the reference path. For all remaining points along the reference path, motion primitives are appended to the motion path, culminating in the addition of the last point on line 29 of Algorithm 3. Straight and turn motions will be appended from lines 5 through 24 of Algorithm 3. After attempting to retrieve a set of turn waypoints from the current triplet on line 6 of Algorithm 3, the next operation depends on what getTurnPoints (procedure illustrated in Algorithm 4) are returned. If a set of waypoints were found, they are appended to the motion path on line 13 of Algorithm 3. If it was deemed unnecessary, this procedure is skipped. In either case, an additional intermediate point may be obtained in lines 9 and 16 of Algorithm 3 and added a priori. Points that are added in between turns are considered to be a part of direct segments that may contain changes in either and/or both altitude and velocity. These points may also include the first or last point along a turn. Regardless, if a failure is observed on line 21 of Algorithm 3, it is assumed a turn should have been made, but it was deemed infeasible.

Algorithm 3 Motion Path Generation Input: R Output: O, found 1: found ← false 2: R ← adjustReference(R) 3: first ← R[1] 4: O ← {first} 5: for i = 2, ... , r − 1 do 6:  turn_code, turn_points ← getTurnPoints   $\left( {\underset{first}{\rightarrow}{,{R\lbrack i\rbrack},{R\left\lbrack {i + 1} \right\rbrack}}} \right)$ 7:  switch turn_code do 8:  case FOUND 9:   ${int\_ found},\left. {int\_}\underset{points}{\rightarrow}\leftarrow{getIntermediatePoint} \right.$   $\left( {\underset{first}{\rightarrow}{,{{turn\_}\underset{points}{\rightarrow}\lbrack 1\rbrack}}} \right)$ 10:  if inter_found then 11:    $\left. O\leftarrow\left\{ {O;{int\_}_{\overset{\rightarrow}{p⁢o⁢i⁢n⁢t}}} \right\} \right.$ 12:  end if 13: 14:   $\begin{matrix} \left. O\leftarrow\left\{ {O;{{turn\_}\underset{points}{\rightarrow}}} \right\} \right. \\ \left. {first}\leftarrow{{turn} -}\underset{points}{\rightarrow}\lbrack{end}\rbrack \right. \end{matrix}$ 15:  case SKIP 16: ${int\_ found},\left. {int\_}\underset{point}{\rightarrow}\leftarrow{getIntermediatePoint} \right.$   $\left( {\underset{first}{\rightarrow}{,{R\lbrack i\rbrack}}} \right)$ 17:  if int_found then 18:   O ← {O; int_pount} 19:  end if 20:   $\left. \underset{first}{\rightarrow}\leftarrow\underset{second}{\rightarrow} \right.$ 21:  case FAILED 22:  return 23: end for 24: ${int\_ found},\left. {int\_}\underset{point}{\rightarrow}\leftarrow{getIntermediatePoint} \right.$ $\left( {\underset{first}{\rightarrow}{,{R\lbrack r\rbrack}}} \right)$ 25: if inter_found then 26:   $\left. O\leftarrow\left\{ {O;{int\_}_{\overset{\rightarrow}{p⁢o⁢u⁢n⁢t}}} \right\} \right.$ 27: end if 28: O ← {O; R[r]} 29: found ← true

7.1 getTurnPoints

This procedure (getTurnPoints) makes use of the turns library (e.g., Section 8.1) or flight turns module 204 to retrieve a set of evenly spaced, turn waypoints, between an ordered triplet of waypoints, as Algorithm 4 depicts. The choice of what turn to use is described below in Algorithm 4, and for the sake of brevity, some detail is omitted.

ALGORITHM 4 GetTurnPoints ${\text{Input:}{one}},{\underset{two}{\rightarrow}{,\underset{three}{\rightarrow}}}$ Output: ret_code, turn_points 1: $\left. {waypoint\_ type}\leftarrow\underset{{two}.r}{\rightarrow} \right.$ 2: $\left. {angle}\leftarrow{{getTurnAngle}\left( {{one},{\underset{two}{\rightarrow}{,\underset{three}{\rightarrow}}}} \right)} \right.$ 3: $\left. {radius}\leftarrow{{getTurnRadius}\left( {\underset{two}{\rightarrow}{,v}} \right)} \right.$ 4: switch waypoint_type do 5: case HARD_VIA 6: if angle > 30 then 7:  type ← DIRECT_TO 8: else 9:  type ← TEAR_DROP 10: end if 11: case SOFT_VIA 12: type ← FLY_BY 13: case FREE 14: type ← FLY_BY 15: valid, turn_points, num_points ← turnLibrary $\left( {\underset{one}{\rightarrow}{,{\underset{two}{\rightarrow}{,{\underset{three}{\rightarrow}{,{type},{radius}}}}}}} \right)$ 16: if valid = false & type ≠ SOFT_VIA then 17:  valid, turn_points,num_points ← turnLibrary $\left( {\underset{one}{\rightarrow}{,{\underset{two}{\rightarrow}{,{\underset{three}{\rightarrow}{,{TEAR\_ DROP},{radius}}}}}}} \right)$ 18: end if 19: if valid = false then 20:  ret_code ← FAILURE 21:  return 22: end if 23: if num_pts < 2 then 24:  ret_code ← SKIP 25:  return 26: end if 27: ret_code ← FOUND

Further with respect to turn choice, the choice in what turn is chosen is static as discussed in the example Algorithm 4. It should be appreciated that the logic can be adapted to work with a particular vehicle or decided by the optimizer of the global planner module 202. More on the latter will be discussed in Section 8.2.

All turns are computed between three successive waypoints, with the second waypoint acting as the general location for the turn. In Algorithm 4, lines 1 through 3 retrieve information relevant for a turn such as the type of waypoint it will be based off of, the angle, and turn radius. In Algorithm 4, lines 4 through 14 ascertain the appropriate turn type, based on the waypoint type and turn angle. After all relevant information is obtained, a request is made to the turnLibrary (e.g., flight turns module 204 and/or global planner module 202) to produce the appropriate turn. In case of a failure for certain waypoint types, logic is introduced from lines 16 to 18 of Algorithm 4 to attempt a turn that is more flexible in terms of feasibility requirements. For example, lines 16 to 18 reference the use of a specific type of turn (e.g., teardrop) to account for edge cases where the distances along segments could be too short for the previously chosen turn to fit. Because most turns require some space to fit between segments, a teardrop starts and ends at the same point, as can be seen in FIG. 12. The return code is ascertained from lines 19 through 27 of Algorithm 4. If failure code is returned and if the number of waypoints retrieved is too small, the Algorithm 4 skips them entirely. Methods used are described in more detail below.

In Algorithm 4, the turnLibrary will retrieve a set of evenly spaced waypoints between a given triplet of points, turn type, and turn radius. This method is discussed more in Section 8.1. With respect to getTurnRadius, this is the radius of a circle that is believed to be a conservative approximate of vehicle turn capability, such as for aircraft 10. The getTurnAngle is the angle formed between the three given points (i.e., the given triplet of waypoints).

7.2 getIntermediatePoint

The role of this method of the global planner module 202 is to provide a single waypoint along a segment (between a given pair of waypoints), which marks a change in velocity. The getIntermediatePoint is described in Algorithm 5 below with some detail omitted for the sake of brevity and ease of understanding. On lines 4 through 7 of Algorithm 5, an estimate for the distances needed to adjust speed is calculated and compared to the overall distance to ensure the change is feasible. On lines 8 through 15 of Algorithm 5, an intermediate set of coordinates is found using the distance that needed to be adjusted. In addition, a tracked speed is assigned depending on whether the second waypoint is coming to a stop. This also influences the position of the intermediate point. In Algorithm 5, line 19 retrieves an altitude value that is believed to be reachable following the segment until the intermediate coordinates are reached.

In Algorithm 5, the getDistanceToAdjustSpeed estimates the amount of distance needed to complete speed adjustment between two points, not accounting for their positions. The getDistanceAtUniformAltitude calculates the amount of distance between two points in terms of their positions, assuming both had the same altitude (lowest between the two). In Algorithm 5, the getDistanceAtUniformAltitude calculates the amount of distance between two points in terms of their positions, assuming both had the same altitude (lowest between the two). The getIntermediatePosition retrieves the geospatial coordinates of a point along a segment between two points, by some alpha=[0,1] that is indicative of distance progressed over total segment distance. The getReachableAltitude estimates the altitude achievable by an intermediate waypoint between two others in Algorithm 5.

With respect to the altitude and speed profile, it is noted that in the current example implementation, only a single point is returned marking a change in velocity where the objective is to move between two points without tracking a cruise altitude/speed. In one or more embodiments, this method is altered to return an appropriate number of intermediate waypoints for a trapezoid altitude and speed profile.

Algorithm 5 getIntermediatePoint ${\text{Input:}\underset{one}{\rightarrow}},\underset{two}{\rightarrow}$ ${\text{Output:}{found}},{{int\_}\underset{point}{\rightarrow}}$ 1: found = false 2: if first. v = second. v then return 3: end if 4: $\left. {dist\_ adjust}\leftarrow{{getDistanceToAdjustSpeed}\left( {\underset{one}{\rightarrow}{,\underset{two}{\rightarrow}}} \right)} \right.$ 5: $\left. {dist}_{total}\leftarrow{{getDistanceAtUniformAltitude}\left( {\underset{one}{\rightarrow}{,\underset{two}{\rightarrow}}} \right)} \right.$ 6: if dist_total < dist_adjust then 7:  return 8: end if 9: if two. v ≠ 0 then 10:  alpha ← 1 − dist_adjust/dist_total 11:   $\left. {speed}\leftarrow\underset{{two}.v}{\rightarrow} \right.$ 12: else 13:  alpha ← 1 − dist_adjust/dist_total 14:  speed ← one. v 15: end if 16: ${lat},\left. {lan}\leftarrow{{get}{{IntermediatePosition}\left( {\underset{one}{\rightarrow}{,{\underset{two}{\rightarrow}{,{alpha}}}}} \right)}} \right.$ 17: ${{int\_}\underset{point}{\rightarrow}{\cdot \mu}} = {lat}$ 18: ${{int\_}\underset{point}{\rightarrow}{\cdot \lambda}} = {lon}$ 19: ${{int\_}\underset{point}{\rightarrow}{\cdot v}} = {speed}$ 20: ${{int\_}\underset{point}{\rightarrow}{\cdot h}} = {{getReachableAltitude}\left( {\underset{one}{\rightarrow}{,{\underset{two}{\rightarrow}{,{{int\_}\underset{point}{\rightarrow}}}}}} \right)}$ 21: found ← true

8. Optimizing Global Routes For Aircraft Via Library Of Turns

The global planner module 202 generates an obstacle free sequence of route segments for the aircraft 10 to fly. To enforce a desired turn type for flying between two segments, the global planner module 202 includes turn waypoints of a specific turn type. There could be cases where the specified turn type may not be the most optimal or feasible for a given reference path. To address the issue of the specified turn type not being the most optimal or feasible for a given reference path, one or more embodiments incorporate the issue of turn type into the optimization problem of the global planner module 202. The output of the optimization of the global planner module 202 is then the optimal route segments and optimal turn types for each pair of route segments.

This approach can also be adopted for cases where the route plan is created manually. In many cases, the ground station operator or the pilot assigns the aircraft routes. In this case, the optimization of global planner module 202 and/or flight turns module 204 optimizes (only) for the turn types and not for the route segments. For instance, FIG. 11 depicts a route with four segments overlaid with multiple turn choices. Regardless if the global route is generated by global planner module 202 or input to the global planner module 202 (or flight turns module 204), the best combination of turn types can be chosen by the optimization of global planner module 202 and/or flight turns module 204.

8.1 Library of Turns

As depicted in FIG. 12, the turnLibrary (e.g., global planner module 202 and/or flight turns module 204) computes a set of waypoints that makeup a turn between a given ordered triplet (e.g., triplet of waypoints). Examples of such turns in the library of turns 206 are depicted in FIG. 12, and each type of turn may be associated with certain flight constraints. Further, it should be appreciated that the turn types can be optimized based on various criteria and should not be limited. Examples of criteria for selecting turn types can include any one or more of the following (which should not be contradictory) the shortest, safest, preferred turn type, fastest turn type, minimum time, minimum fuel, maximum time, etc.

8.2 Optimizing Over Turns

As discussed earlier, the logic used to dictate the choice of turn type does not have to be static. The static turn type may not be the most optimal or feasible for a given reference path R. Using global planner module 202 and/or flight turns module 204, a means to address this issue is to incorporate the turn type into the original optimization problem discussed in Section 4.10. As turn types can logically be represented as integers, this would change the problem into a mixed-integer programming type. The following sections describe changes to the approach discussed thus far thereby enabling this type of optimization in global planner module 202 and/or flight turns module 204. In one or more embodiments, although optimizing over turns may be described and integrated with the preparation of the global route in examples below for ease of understanding, it should be appreciated that optimizing the turn type can be performed separate or independent from generation of the global route.

8.2.1 State Specification With Turns Specified

In order to ease understanding and to reuse of much of the previously described algorithms/data structures (such as, for example, Particle Swarm) described in this document, selected turn types (encoded as q^(R)) are appended to the end of the state vector defined in Section 4.5. One or more embodiments are not meant to be limited to using Particle Swarm and other algorithms/data structures discussed above. The state vector originally defined in Equation 9 is redefined as

$\begin{matrix} {\overset{\rightarrow}{x} = \begin{bmatrix} \mu_{1}^{C} \\ \lambda_{1}^{C} \\ \mu_{2}^{C} \\ \lambda_{2}^{C} \\  \vdots \\ \mu_{c}^{C} \\ \lambda_{c}^{C} \\ \delta_{1}^{B} \\ \theta_{1}^{B} \\ \delta_{2}^{B} \\ \theta_{2}^{B} \\  \vdots \\ \delta_{b}^{B} \\ \theta_{b}^{B} \\ q_{2}^{R} \\  \vdots \\ q_{r - 1}^{R} \end{bmatrix}} & (18) \end{matrix}$

where q_(i) ^(R) specifies the turn type to use near the waypoint at row i in R. Since a turn is only between triplets of waypoints, there is no need to specify a turn type near the first or last waypoint.

The upper and lower bounds in Equations 10 and 11 are redefined as

$\begin{matrix} {{\overset{\rightarrow}{x}}_{lb} = {{\begin{bmatrix} \mu_{\min} \\ \lambda_{\min} \\  \vdots \\ {\times c} \\ 0 \\ 0 \\ {\times b} \\ 1 \\  \vdots \\ {{\times r} - 2} \end{bmatrix}{\overset{\rightarrow}{x}}_{ub}} = \begin{bmatrix} \mu_{\max} \\ \lambda_{\max} \\  \vdots \\ {\times c} \\ d_{1}^{B} \\ {2\pi} \\ d_{2}^{B} \\ {2\pi} \\  \vdots \\ d_{b}^{B} \\ {{2\pi}q_{\max} \vdots} \\ {{\times r} - 2} \end{bmatrix}}} & (19) \end{matrix}$

where 1 and q_(max) are the minimum and maximum integer values associated with a turn type. For example, FIG. 12 shows various turn types within the turn library where q_(max)=8.

8.2.2 Route Optimization Problem With Turns Specified

To work with turn types, an additional constraint is appended to the optimization problem described in Section 4.10 for global planner module 202. The problem then becomes the following:

${\overset{\rightarrow}{x^{*}} = {{\underset{\overset{\rightarrow}{x}}{\arg}\min{\sum\limits_{i = 1}^{r}{{dist}\left( {S\left( {{\overset{\rightarrow}{w}}_{\iota}^{R},{\overset{\rightarrow}{w}}_{\iota + 1}^{R}} \right)} \right)}}} + {\sum\limits_{i = 1}^{o}{{dist}\left( {S\left( {{\overset{\rightarrow}{w}}_{\iota}^{O},{\overset{\rightarrow}{w}}_{\iota + 1}^{O}} \right)} \right)}}}}{{{subject}{to}\overset{\rightarrow}{x}} \geq {\overset{\rightarrow}{x}}_{lb}}{\overset{\rightarrow}{x} \leq {\overset{\rightarrow}{x}}_{ub}}\left. R\leftarrow{f_{R}\left( \overset{\rightarrow}{x} \right)} \right.\left. O\leftarrow{f_{O}\left( \overset{\rightarrow}{x} \right)} \right.{{{S\left( {{\overset{\rightarrow}{w}}_{J}^{O},{\overset{\rightarrow}{w}}_{J + 1}^{O},\alpha} \right)} \notin {NFZs}},{\forall{\alpha \in \left\lbrack {0,1} \right\rbrack}},{\forall{j \in \left\{ {1,\ldots,{o - 1}} \right\}}}}{{{S\left( {{\overset{\rightarrow}{w}}_{J}^{O},{\overset{\rightarrow}{w}}_{J + 1}^{O},\alpha} \right)} \notin {Terrian}},{\forall{\alpha \in \left\lbrack {0,1} \right\rbrack}},{\forall{j \in \left\{ {1,\ldots,{o - 1}} \right\}}}}{{f_{w}\left( {O,t} \right)} \notin {{Moving\_ NFZs}(t)}}{{q_{k}^{R} \in \left\{ {1,\ldots,q_{\max}} \right\}},{\forall{k \in \left\{ {2,\ldots,{r - 1}} \right\}}}}$

where the last constraint enforces that all turn type variables are to be assigned to an integer belonging to a set where each is indicative of a turn type.

8.2.3 Motion Path Generation With Turns Specified

To incorporate optimization turn choice into the motion generation process of global planner module 202, Algorithms 3 and 4 discussed in Section 7 require slight modifications. These modifications are described in Algorithm 6 and Algorithm 7 below, respectively where changes are highlighted by bold comments. In Algorithm 6, selected turn types are included as input, and each turn type is passed to getTurnPoints on line 6. In Algorithm 7, since the turn type is specified as input, all the original turn logic described on lines 4 through 18 in Algorithm 4 is now removed.

ALGORITHM 6 motion path generation with turns specified Input: R, q2,...,qt-1

Turn types selected now provided as additional input Output: O, found 1: found ← false 2: R ← adjustReference(R) 3: first ← R[1] 4: O ← {first} 5: for i = 2,...,r − 1 do 6:   ${turn\_ code},\left. {turn\_ points}\leftarrow{{getTurnPoints}\left( {\underset{fiirst}{\rightarrow}{,{R\lbrack i\rbrack},{R\left\lbrack {i + 1} \right\rbrack},{qi}}} \right)} \right.$  Tum type is now passed 7:   switch turn_code do 8:    case FOUND 9:      ${int\_ found},\left. {int\_ point}\leftarrow{{getIntermediatePoint}\left( {\underset{first}{\rightarrow}{,{{turn}\underset{points}{\rightarrow}\lbrack l\rbrack}}} \right)} \right.$ 10:     if inter_found then 11:       $\left. O\leftarrow\left\{ {O;{{int\_}\underset{point}{\rightarrow}}} \right\} \right.$ 12:     end if 13:      $\left. O\leftarrow\left\{ {O;{{turn\_}\underset{points}{\rightarrow}}} \right\} \right.$ 14:      $\left. \underset{first}{\rightarrow}\leftarrow{{turn\_ points}\lbrack{end}\rbrack} \right.$ 15:    case SKIP 16:     ${int\_ found},\left. {int}\underset{point}{\rightarrow}\leftarrow{{getIntermediatePoint}\left( {\underset{first}{\rightarrow}{,{R\lbrack i\rbrack}}} \right)} \right.$ 17:     if inter_found then 18:       $\left. O\leftarrow\left\{ {O;{{int\_}\underset{point}{\rightarrow}}} \right\} \right.$ 19:     end if 20:      $\left. \underset{first}{\rightarrow}\leftarrow\underset{second}{\rightarrow} \right.$ 21:    case FAILED 22:     return 23: end for 24: ${int\_ found},\left. {int\_}\underset{point}{\rightarrow}\leftarrow{{getIntermediatePoint}\left( {\underset{first}{\rightarrow}{,{R\lbrack r\rbrack}}} \right)} \right.$ 25: if inter_found then 26: $\left. O\leftarrow\left\{ {O;{{int\_}\underset{point}{\rightarrow}}} \right\} \right.$ 27: end if 28: O ← {O; R[r]} 29: found ← true

ALGORITHM 7 get TurnPoints with Turns Specified ${\text{Input:}\underset{one}{\rightarrow}},{\underset{two}{\rightarrow}{,{\underset{three}{\rightarrow}{,{type}}}}}$

Turn type provided as additional input ${\text{Output:}{ret\_ code}},{{turn\_}\underset{points}{\rightarrow}}$ 1: $\left. {waypoint\_ type}\leftarrow\underset{two}{\rightarrow}. \right.$ 2: $\left. {angle}\leftarrow{{getTurnAngle}\left( {\underset{one}{\rightarrow}{,{\underset{two}{\rightarrow}{,\underset{three}{\rightarrow}}}}} \right)} \right.$ 3: $\left. {radius}\leftarrow{{getTurnRadius}\left( {\underset{two}{\rightarrow}{.v}} \right)} \right.$ 4: ${valid},{turn\_ points},\left. {num\_ points}\leftarrow{{turnLibrary}\left( {\underset{one}{\rightarrow}{,{\underset{two}{\rightarrow}{,{\underset{three}{\rightarrow},}}}}} \right)} \right.$ type, radius)

Turn logic removed 5: if valid = false then 6:  ret_code ← FAILURE 7:   return 8: end if 9: if num_pts < 2 then 10:  ret_code ← SKIP 11:   return 12: end if 13: ret_code ← FOUND

Moving away from the section headings, FIG. 13 depicts a flow chart of a method 1300 for autonomous global route planning among obstacles (e.g., no-fly zones, terrain, etc.) and control of aircraft 10 using global planner module 202 (and flight turns module 204) in accordance with one or more embodiments. At block 1302, the global planner module 202 is configured to receive points associated with a start location and a destination location. For example, the points can be waypoints such as via-points input by the operator using a graphical user interface of global planner module 202. At block 1304, the global planner module 202 is configured to determine whether the points comprise one or more hard points (e.g., hard via-points), one or more soft points (e.g., soft via-points), or both. At block 1306, the global planner module 202 is configured to determine at least one obstruction to avoid (if any). Obstructions are not a requirement, but a constraint provided, if they exist. In the absence of obstructions, a generated route is still required to ensure conformance to vehicle dynamic constraints. At block 1308, the global planner module 202 is configured to autonomously generate a global route comprising the points and segments associated with the points, the segments comprising rhumb lines, great-circle arcs, or both. Generating the route comprises, responsive to the points comprising the one or more soft points, avoiding the at least one obstruction by permitting a distance associated with the one or more soft points to be reached and adding at least one free waypoint at block 1310. Generating the route comprises, responsive to the points comprising the one or more hard points, avoiding the at least one obstruction by requiring the one or more hard points to be reached and adding the at least one free waypoint at block 1312. The one or more free waypoints are utilized by the global planner module 202 to avoid the obstacle.

Further, autonomously generating the route comprises the global planner module 202 selecting the route from candidate routes. For example, the candidate routes can be represented as particles in a swarm optimization, and the location of the particles can be moved to optimize the swarm. Autonomously generating the route comprises the global planner module 202 selecting the route from candidate routes based on an optimization. The optimization comprises the global planner module 202 iterating through the candidate routes based on costs for each of the candidate routes. The route is optimized as the shortest path while accounting for whether the points comprise the one or more hard points, the one or more soft points, or both and avoiding the at least one obstruction. Use of the rhumb lines, the great-circle arcs, or both is selected in advance via a graphical user interface of global planner module 202.

The global planner module 202 (and/or flight turns module 204) is configured to optimize turn types associated with the segments. The global planner module 202 (and/or flight turns module 204) is configured to select a turn type associated with the segments based on a shortest distance. The global planner module 202 (and/or flight turns module 204) is configured to autonomously control and/or cause the FCC 75 to autonomously control a vehicle (e.g., aircraft 10) on the global route.

FIG. 14 depicts a flow chart of a method 1400 for autonomously optimizing turns in a global route among obstacles (e.g., no-fly zones, terrain, etc.) and control of aircraft 10 using turns module 204 and/or global planner module 202 in accordance with one or more embodiments. At block 1402, the turns module 204 and/or global planner module 202 is configured to receive a global route comprising points and segments associated with the points. At block 1404, the turns module 204 and/or global planner module 202 is configured to access a turns library (e.g., library of turns 206). At block 1406, the turns module 204 and/or global planner module 202 is configured to select turn types from the turns library (e.g., library of turns 206) in accordance with whether the points comprise one or more hard points, one or more soft points, or both. Further, a subset of the turn types in the turns library (e.g., library of turns 206) are selectable for the one or more hard points. The hard points require turn types in which the turn forces aircraft 10 to fly directly through, over, and/or to the hard point. For example, hard via-points can be used with turn types 1, 2, and 4-8 in FIG. 12. Any of the turn types in the library of turns 206 (e.g., turn types 1-8 in FIG. 12) are selectable for the one or more soft points. Soft points can utilize any turn type because the aircraft 10 can fly within the radius of the soft point, and the aircraft 10 is not required to fly directly through, over, and/or to soft point. The segments comprise rhumb lines, the great-circle arcs, or both. Selecting the turn types from the turns library (e.g., library of turns 206) comprises the turns module 204 and/or global planner module 202 selecting the turn types based on a shortest distance for the global route. The turns module 204/global planner module 202 is configured to autonomously control and/or cause the FCC 75 to autonomously control a vehicle (e.g., aircraft 10) on the global route.

Now, turning to the details of FIG. 3, a schematic of an example computing system 312 having functions and features utilized according to one or more embodiments. The computer system 312 can be operational with numerous other general purpose or special purpose computing system environments or configurations. The computer system 312 can be representative of various types of computer systems on which operations and functions can run in the aircraft 10. The functions and capabilities of computing system 312 can be utilized in FIGS. 1-14 to implement one or more features of the flight control system 70 including flight control computer 75, processing system 90, global planner module 202, flight turns module 204, library of flight turns 206, etc., according to embodiments.

Computer system 312 may be described in the general context of computer system-executable instructions, such as program modules, being executed by a computer system. Generally, program modules may include routines, programs, objects, components, logic, data structures, and so on that perform particular tasks or implement particular abstract data types. Computer system 312 may be practiced in distributed cloud computing environments where tasks are performed by remote processing devices that are linked through a communications network. In a distributed cloud computing environment, program modules may be located in both local and remote computer system storage media including memory storage devices.

The components of computer system 312 may include, but are not limited to, one or more processors or processing units 316, a system memory 328, and a bus 318 that couples various system components including system memory 328 to processor 316. Bus 318 represents one or more of any of several types of bus structures, including a memory bus or memory controller, a peripheral bus, an accelerated graphics port, and a processor or local bus using any of a variety of bus architectures. By way of example, and not limitation, such architectures include Industry Standard Architecture (ISA) bus, Micro Channel Architecture (MCA) bus, Enhanced ISA (EISA) bus, Video Electronics Standards Association (VESA) local bus, and Peripheral Component Interconnects (PCI) bus.

Computer system 312 typically includes a variety of computer system readable media. Such media may be any available media that is accessible by computer system 312, and it includes both volatile and non-volatile media, removable and non-removable media. The system memory 328 can include computer system readable media in the form of volatile memory, such as random access memory (RAM) 330 and/or cache memory 332. Computer system 312 may further include other removable/non-removable, volatile/non-volatile computer system storage media. By way of example only, storage system 334 can be provided for reading from and writing to a nonremovable, non-volatile magnetic media (not shown and typically called a “hard drive”). Although not shown, a magnetic disk drive for reading from and writing to a removable, non-volatile magnetic disk (e.g., a “floppy disk”), and an optical disk drive for reading from or writing to a removable, non-volatile optical disk such as a CD-ROM, DVD-ROM or other optical media can be provided. In such instances, each can be connected to bus 318 by one or more data media interfaces. Memory 328 may include at least one program product having a set (e.g., at least one) of program modules that are configured to carry out the functions of embodiments.

Program/utility 340, having a set (at least one) of program modules 342, may be stored in memory 328 by way of example, and not limitation, as well as an operating system, one or more application programs, other program modules, and program data. Each of the operating system, one or more application programs, other program modules, and program data or some combination thereof, may include an implementation of a networking environment. Program modules 342 generally carry out the functions and/or methodologies of embodiments as described herein.

Computer system 312 may also communicate with one or more external devices 314 such as a keyboard, a pointing device, a touch screen display 324, etc.; one or more devices that enable a user to interact with computer system 312; and/or any devices (e.g., network card, modem, etc.) that enable computer system 312 to communicate with one or more other computing devices. Such communication can occur via Input/Output (I/O) interfaces 322. Still yet, computer system 312 can communicate with one or more networks such as a local area network (LAN), a general wide area network (WAN), and/or a public network (e.g., the Internet) via network adapter 320. As depicted, network adapter 320 communicates with the other components of computer system 312 via bus 318. It should be understood that although not shown, other hardware and/or software components could be used in conjunction with computer system 312. Examples, include but are not limited to: microcode, device drivers, redundant processing units, external disk drive arrays, RAID systems, tape drives, and data archival storage systems, etc.

Embodiments may be a system, a method, and/or a computer program product at any possible technical detail level of integration. The computer program product may include a computer readable storage medium (or media) having computer readable program instructions thereon for causing a processor to carry out embodiments.

The computer readable storage medium can be a tangible device that can retain and store instructions for use by an instruction execution device. The computer readable storage medium may be, for example, but is not limited to, an electronic storage device, a magnetic storage device, an optical storage device, an electromagnetic storage device, a semiconductor storage device, or any suitable combination of the foregoing. A non-exhaustive list of more specific examples of the computer readable storage medium includes the following: a portable computer diskette, a hard disk, a random access memory (RAM), a read-only memory (ROM), an erasable programmable read-only memory (EPROM or Flash memory), a static random access memory (SRAM), a portable compact disc read-only memory (CD-ROM), a digital versatile disk (DVD), a memory stick, a floppy disk, a mechanically encoded device such as punch-cards or raised structures in a groove having instructions recorded thereon, and any suitable combination of the foregoing. A computer readable storage medium, as used herein, is not to be construed as being transitory signals per se, such as radio waves or other freely propagating electromagnetic waves, electromagnetic waves propagating through a waveguide or other transmission media (e.g., light pulses passing through a fiber-optic cable), or electrical signals transmitted through a wire.

Computer readable program instructions described herein can be downloaded to respective computing/processing devices from a computer readable storage medium or to an external computer or external storage device via a network, for example, the Internet, a local area network, a wide area network and/or a wireless network. The network may comprise copper transmission cables, optical transmission fibers, wireless transmission, routers, firewalls, switches, gateway computers and/or edge servers. A network adapter card or network interface in each computing/processing device receives computer readable program instructions from the network and forwards the computer readable program instructions for storage in a computer readable storage medium within the respective computing/processing device.

Computer readable program instructions for carrying out operations of embodiments may be assembler instructions, instruction-set-architecture (ISA) instructions, machine instructions, machine dependent instructions, microcode, firmware instructions, state-setting data, configuration data for integrated circuitry, or either source code or object code written in any combination of one or more programming languages, including an object oriented programming language such as Smalltalk, C++, or the like, and procedural programming languages, such as the “C” programming language or similar programming languages. The computer readable program instructions may execute entirely on the user's computer, partly on the user's computer, as a stand-alone software package, partly on the user's computer and partly on a remote computer or entirely on the remote computer or server. In the latter scenario, the remote computer may be connected to the user's computer through any type of network, including a local area network (LAN) or a wide area network (WAN), or the connection may be made to an external computer (for example, through the Internet using an Internet Service Provider). In some embodiments, electronic circuitry including, for example, programmable logic circuitry, field-programmable gate arrays (FPGA), or programmable logic arrays (PLA) may execute the computer readable program instruction by utilizing state information of the computer readable program instructions to personalize the electronic circuitry, in order to perform embodiments.

Embodiments are described herein with reference to flowchart illustrations and/or block diagrams of methods, apparatus (systems), and computer program products according to embodiments of the invention. It will be understood that each block of the flowchart illustrations and/or block diagrams, and combinations of blocks in the flowchart illustrations and/or block diagrams, can be implemented by computer readable program instructions.

These computer readable program instructions may be provided to a processor of a general purpose computer, special purpose computer, or other programmable data processing apparatus to produce a machine, such that the instructions, which execute via the processor of the computer or other programmable data processing apparatus, create means for implementing the functions/acts specified in the flowchart and/or block diagram block or blocks. These computer readable program instructions may also be stored in a computer readable storage medium that can direct a computer, a programmable data processing apparatus, and/or other devices to function in a particular manner, such that the computer readable storage medium having instructions stored therein comprises an article of manufacture including instructions which implement aspects of the function/act specified in the flowchart and/or block diagram block or blocks.

The computer readable program instructions may also be loaded onto a computer, other programmable data processing apparatus, or other device to cause a series of operational steps to be performed on the computer, other programmable apparatus or other device to produce a computer implemented process, such that the instructions which execute on the computer, other programmable apparatus, or other device implement the functions/acts specified in the flowchart and/or block diagram block or blocks.

The flowchart and block diagrams in the Figures illustrate possible implementations of fabrication and/or operation methods according to various embodiments of the present invention. Various functions/operations of the method are represented in the flow diagram by blocks. In some alternative implementations, the functions noted in the blocks can occur out of the order noted in the Figures. For example, two blocks shown in succession can, in fact, be executed substantially concurrently, or the blocks can sometimes be executed in the reverse order, depending upon the functionality involved.

The terms “about,” “substantially,” “approximately,” and variations thereof, are intended to include the degree of error associated with measurement of the particular quantity based upon the equipment available at the time of filing the application. For example, “about” can include a range of ±8% or 5%, or 2% of a given value

The terminology used herein is for the purpose of describing particular embodiments only and is not intended to be limiting of the present disclosure. As used herein, the singular forms “a”, “an” and “the” are intended to include the plural forms as well, unless the context clearly indicates otherwise. It will be further understood that the terms “comprises” and/or “comprising,” when used in this specification, specify the presence of stated features, integers, steps, operations, elements, and/or components, but do not preclude the presence or addition of one or more other features, integers, steps, operations, element components, and/or groups thereof.

While the present disclosure has been described with reference to an exemplary embodiment or embodiments, it will be understood by those skilled in the art that various changes may be made and equivalents may be substituted for elements thereof without departing from the scope of the present disclosure. By way of example, aspects of the invention can be used in other forms of aircraft, including coaxial aircraft, tilt rotor aircraft and fixed wing aircraft. In addition, many modifications may be made to adapt a particular situation or material to the teachings of the present disclosure without departing from the essential scope thereof. Therefore, it is intended that the present disclosure not be limited to the particular embodiment disclosed as the best mode contemplated for carrying out this present disclosure, but that the present disclosure will include all embodiments falling within the scope of the claims. 

What is claimed is:
 1. A method for route planning, the method comprising: receiving points associated with a start location and a destination location; determining whether the points comprise one or more hard points, one or more soft points, or both, a hard point representing a first location through which a route is to pass and a soft point representing a second location associated with a region, defined by a corresponding non-zero radius or distance from the second location, through which the route is to pass; determining at least one obstruction to avoid; and autonomously generating the route comprising the points and segments associated with the points, the segments comprising rhumb lines, great-circle arcs, or both, wherein generating the route comprises: responsive to the points comprising the one or more soft points, avoiding the at least one obstruction by permitting a distance associated with the one or more soft points to be reached and adding at least one free waypoint; and responsive to the points comprising the one or more hard points, avoiding the at least one obstruction by requiring the one or more hard points to be reached and adding the at least one free waypoint.
 2. The method of claim 1, wherein autonomously generating the route comprises selecting the route from candidate routes.
 3. The method of claim 1, wherein autonomously generating the route comprises selecting the route from candidate routes based on an optimization.
 4. The method of claim 3, wherein the optimization comprises iterating through the candidate routes based on costs for each of the candidate routes.
 5. The method of claim 1, wherein the route is optimized as a shortest path while accounting for whether the points comprise the one or more hard points, the one or more soft points, or both and avoiding the at least one obstruction.
 6. The method of claim 1, wherein use of the rhumb lines, the great-circle arcs, or both is selected in advance.
 7. The method of claim 1, further comprising optimizing turn types associated with the segments.
 8. The method of claim 1, further comprising selecting a turn type associated with the segments based on a shortest distance.
 9. The method of claim 1, further comprising autonomously controlling a vehicle on the route.
 10. A method for optimizing turns in a route, the method comprising: receiving the route comprising points and segments associated with the points; accessing a turns library; and selecting turn types from the turns library in accordance with whether the points comprise one or more hard points, one or more soft points, or both, a hard point representing a first location through which the route is to pass and a soft point representing a second location associated with a region, defined by a corresponding non-zero radius or distance from the second location, through which the route is to pass.
 11. The method of claim 10, wherein a subset of the turn types in the turns library are selectable for the one or more hard points.
 12. The method of claim 10, wherein any of the turn types are selectable for the one or more soft points.
 13. The method of claim 10, wherein the segments comprise rhumb lines, great-circle arcs, or both.
 14. The method of claim 10, wherein selecting the turn types from the turns library comprises selecting the turn types based on a shortest distance.
 15. The method of claim 10, further comprising autonomously controlling a vehicle on the route.
 16. A system comprising: a processor; and memory coupled to the processor and comprising computer-executable instructions that, when executed by the processor, cause the processor to perform operations comprising: receiving points associated with a start location and a destination location; determining whether the points comprise one or more hard points, one or more soft points, or both, a hard point representing a first location through which a route is to pass and a soft point representing a second location associated with a region, defined by a corresponding non-zero radius or distance from the second location, through which the route is to pass; determining at least one obstruction to avoid; and autonomously generating the route comprising the points and segments associated with the points, the segments comprising rhumb lines, great-circle arcs, or both, wherein generating the route comprises: responsive to the points comprising the one or more soft points, avoiding the at least one obstruction by permitting a distance associated with the one or more soft points to be reached and adding at least one free waypoint; and responsive to the points comprising the one or more hard points, avoiding the at least one obstruction by requiring the one or more hard points to be reached and adding the at least one free waypoint.
 17. The system of claim 16, wherein autonomously generating the route comprises selecting the route from candidate routes.
 18. The system of claim 16, wherein autonomously generating the route comprises selecting the route from candidate routes based on an optimization.
 19. The system of claim 18, wherein the optimization comprises iterating through the candidate routes based on costs for each of the candidate routes.
 20. The system of claim 16, wherein the route is optimized as a shortest path while accounting for whether the points comprise the one or more hard points, the one or more soft points, or both and avoiding the at least one obstruction. 